package cn.t.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 刷卡-卡号解析工具
 *
 * @author s
 */
public class CardNumAnalysisUtil {


    private static Pattern jiangSenPattern = Pattern.compile("(02){1}([0-9]|[a-z]|[A-Z]){20}(03){1}");
    private static Pattern idIcPattern = Pattern.compile("(02){1}([0-9]|[a-z]|[A-Z]){16}(0D0A03){1}");


    /**
     * 卡号解析
     *
     * @param cardRead 读卡器规则
     * @param rawData  原始卡号
     * @return 解析后卡号
     */
    public static String getCardNum(Integer cardRead, String rawData) {
        switch (cardRead) {
            case 1:
                // HID_1 原始卡号返回
                return rawData;
            case 2:
                // ID读卡器
                return getIdIcNum(rawData);
            case 3:
                // ID/IC一体读卡器
                return getIdIcNum(rawData);
            case 4:
                //
                return rawData;
            default:
                return rawData;
        }
    }

    /**
     * ID/IC一体读卡器
     *
     * @param rawData 原始卡号
     * @return 解析卡号
     */
    public static String getIdIcNum(String rawData) {
        Matcher m = idIcPattern.matcher(rawData);
        if (!m.matches()) {
            return null;
        }
        String asciiString = rawData.substring(2, 18);
        return String.valueOf(Long.parseLong(ascii2String(asciiString), 16));
    }






    public static String ascii2String(String asciiHexString) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < asciiHexString.length(); i = i + 2) {
            long intValue = Long.parseLong(asciiHexString.substring(i, i + 2), 16);
            sb.append((char) intValue);
        }
        return sb.toString();
    }

}
